home *** CD-ROM | disk | FTP | other *** search
- /*
- Copyright Cornell University 1986. All rights are reserved.
-
- menu.c contains routines which create, maintain, and allow access to
- items in the Macintosh menus.
- */
-
- #include <em.h>
-
- #include <3270.h>
- #include <rcodes.h>
- #include <h19.h>
-
- #include <h19.h>
- #include <util.h>
- #include <macdefs.h>
- #include <resdefs.h>
- #include <cntldefs.h>
- #include <config.h>
- #include "menudefs.h"
-
- #include <net.h> /* merged TCP */
- #ifdef DUALTCP
- #endif
-
- #ifndef MACTCP
- #include <tcp.h>
- #include <tcpdefs.h>
- #endif
-
- MenuHandle menu[NMENUS];
-
- WindowPtr menuwindows[MAXWIND];
- short menuwindowcount;
-
- char * seltext = "text";
- char * selscreen = "screen";
- char * selselection = "selection";
-
- char * munderstr = "\PUse Underline Cursor";
- char * mblockstr = "\PUse Block Cursor";
- char * use9str = "\PUse 9 pt. font";
-
- short darefnum;
- short appclosing; /* flag for updatewait() when quitting... */
- extern short pastemode;
-
- /* in event.c */
- extern short autokeycommand; /* autoKey menu commands use this flag to suppress menu flashing */
- extern EventRecord myEvent;
-
- extern findstring();
- extern char fstring[];
-
- #define FONTSIZECOUNT 3
-
- char * bugnote = "\015A copy of the bug report form has been placed in the Clipboard, \
- so you can paste it into an editor or other application; please check the \
- About Comet... menu item for known bugs and palliatives.";
-
- char * bugreport = "\
- Comet Bug Report:\015\
- Mail to: comet-bugs@nmc.cit.cornell.edu\015\015\
- Mac model: (Please note which adapter/monitor combination you use)\015\
- System Version: \015\
- MultiFinder: \015\
- INITs: (Please list the INITs and drivers that are installed in your System Folder)\015\
- Fast drawing: (ENABLED or DISABLED)\015\
- Connection(s): (MacTCP LocalTalk, MacTCP EtherNet, and/or Serial)\015\
- if MacTCP: (Use Asynchronous sends ENABLED or DISABLED--note that\015\
- MacTCP up to 1.0.2 crashes if this is enabled on LocalTalk)\015\
- Bug description: Using Comet 2.1.3 we observed...\015\
- (If possible, please provide enough detail to reproduce the bug)\015";
-
- docommand(mResult)
- long mResult;
- {
- short theItem;
- short theMenu;
- char name[NAMESIZE];
-
- theMenu = mResult >> 16;
- theItem = mResult;
-
- switch(theMenu) {
- case applemenu: {
- switch (theItem) {
- case ABOUT_COMET: {
- int tfont;
- int tsize;
-
- if (keydp != NULL) {
- tfont = keydp->normfont;
- tsize = keydp->fontsize;
- }
- else {
- tfont = FONTCUA;
- tsize = 9;
- }
-
- helpwindow(TEXTABOUT, tfont, tsize);
- break;
- }
- case BUGREPORT: {
- /* put the bug report form into the scrap and alert the user */
- if (mfpresent)
- /* make sure mf updates all client's scrap info */
- SystemEdit(EDCOPY - 1);
-
- ZeroScrap();
- PutScrap((long) strlen(bugreport), 'TEXT', bugreport);
- fillwindow(COPYWINDOW, bugnote, (long) strlen(bugnote), geneva, 12, (long) 0);
- break;
- }
- #ifdef USEHELPWINDOW
- case COMET_HELP: {
- selectwindow(helpwindow);
- break;
- }
- #endif
- case SKIPAPPLE: {
- break;
- }
- default: {
- GrafPtr saveport;
-
- GetPort(&saveport);
- GetItem(menu[APPLEMENU], theItem, name);
-
- emwdeactivate();
- if (keydp->edit && keydp->textscrapped) {
- /* convert the TE scrap if it's the top window */
- HLock(TEScrHandle);
- tetoscrap(*TEScrHandle, TEScrLen);
- HUnlock(TEScrHandle);
- }
- darefnum = OpenDeskAcc(name);
- SetPort(saveport);
- if (!mfpresent && darefnum) {
- setscript(0L); /* restore regular script */
- emedit(keydp, FALSE);
- DrawMenuBar();
- }
- break;
- }
- }
- break;
- }
- case filemenu: {
- menufile(theItem);
- break;
- }
- case editmenu: {
- /* just serve DA's */
- if (SystemEdit(theItem - 1))
- break;
- else {
- menuedit(theItem);
- }
- break;
- }
- case netmenu: {
- menunetwork(theItem);
- break;
- }
- case serialmenu: {
- menuserial(theItem);
- break;
- }
- case sendmenu: {
- menusend(theItem);
- break;
- }
- #ifdef USESERSEND
- case serialsendmenu: {
- menusersend(theItem);
- break;
- }
- #endif
- case ctrlmenu: {
- menuctrl(theItem);
- break;
- }
- case windmenu: {
- menuwind(theItem);
- break;
- }
- case fsizemenu: {
- /* change font size */
- GetItem(menu[FSIZEMENU], theItem, name);
- ptoc(name);
- if (keydp == emdp)
- /* guarantee keydp struct updated, we may setcontext() */
- savecontext(emdp);
- else
- getcontext(keydp);
-
- setscreensize(atoi(name));
- setfontsizemenu(emdp->fontsize);
-
- setcontext(emdp);
- break;
- }
- case curkeymenu: {
- menucurkey(theItem);
- break;
- }
- case pfkeymenu: {
- menupfkey(theItem);
- break;
- }
- case asc1keymenu: {
- keymap( (char) 0, (char) ((theItem - 3) & 0x1f), 0);
- /* allow -1 for 1-n numbering, -2 for title in #1 slot & bar */
- break;
- }
- case asc2keymenu: {
- if (theItem == ASCMENUDEL)
- keymap((char) 0, (char) (0x7f), 0);
- else
- keymap((char) 0, (char) ( ( theItem + 13) & 0x1f), 0);
- /* allow -1 for 1-n numbering, -2 for title in #1 slot & bar */
- break;
- }
- case helpmenu: {
- int tfont;
- int tsize;
-
- if (keydp != NULL) {
- tfont = keydp->normfont;
- tsize = keydp->fontsize;
- }
- else {
- tfont = FONTCUA;
- tsize = 9;
- }
-
- switch (theItem) {
- case INFOBACK: {
- helpwindow(ITEXTBACK, tfont, tsize);
- break;
- }
- case INFOABOUTASCII: {
- helpwindow(ITEXTABOUTASCII, tfont, tsize);
- break;
- }
- case INFOABOUTIBM: {
- helpwindow(ITEXTABOUTIBM, tfont, tsize);
- break;
- }
- case INFOMACROS: {
- helpwindow(ITEXTMACROS, tfont, tsize);
- break;
- }
- case INFOFILE: {
- helpwindow(ITEXTFILE, tfont, tsize);
- break;
- }
- case INFOEDIT: {
- helpwindow(ITEXTEDIT, tfont, tsize);
- break;
- }
- case INFOWIND: {
- helpwindow(ITEXTWIND, tfont, tsize);
- break;
- }
- case INFOTN: {
- helpwindow(ITEXTTN, tfont, tsize);
- break;
- }
- case INFOSERIAL: {
- helpwindow(ITEXTSERIAL, tfont, tsize);
- break;
- }
- case INFOCONTROL: {
- helpwindow(ITEXTCONTROL, tfont, tsize);
- break;
- }
- case INFOASCII: {
- helpwindow(ITEXTASCII, tfont, tsize);
- break;
- }
- case INFOIBM: {
- helpwindow(ITEXTIBM, tfont, tsize);
- break;
- }
- case DUMPINFO: {
- if (keydp != NULL && keydp->textwindow != NULL) {
- /* dump all the help into a text window */
- helptextwindow(TEXTABOUT);
- helptextwindow(ITEXTBACK);
- helptextwindow(TEXTLOGON);
- helptextwindow(ITEXTABOUTASCII);
- helptextwindow(ITEXTABOUTIBM);
- helptextwindow(ITEXTMACROS);
- }
- break;
- }
- case DUMPINFO2: {
- if (keydp != NULL && keydp->textwindow != NULL) {
- /* dump all the help into a text window */
- helptextwindow(ITEXTFILE);
- helptextwindow(ITEXTEDIT);
- helptextwindow(ITEXTWIND);
- helptextwindow(ITEXTTN);
- helptextwindow(ITEXTSERIAL);
- helptextwindow(ITEXTCONTROL);
- helptextwindow(TEXTGLOBALDLOG);
- helptextwindow(TEXTWINDDLOG);
- helptextwindow(TEXTEMDLOG);
- helptextwindow(TEXT3270DLOG);
- helptextwindow(ITEXTASCII);
- helptextwindow(ITEXTIBM);
- /* add the dialog help also... */
-
- }
- break;
- }
- }
- break;
- }
- }
- if (!autokeycommand)
- HiliteMenu(0);
- }
-
-
-
- setupapplemenu()
- {
- InitMenus();
-
- menu[APPLEMENU] = NewMenu(applemenu, "\P\024");
- AppendMenu(menu[APPLEMENU], "\PAbout Comet…");
- AppendMenu(menu[APPLEMENU], "\PBug Report");
- #ifdef USEHELPWINDOW
- AppendMenu(menu[APPLEMENU], "\PHelp…");
- #endif
- AppendMenu(menu[APPLEMENU], "\P(-");
- AddResMenu(menu[APPLEMENU], 'DRVR');
- }
-
-
- setupmenu()
- {
- int count;
-
- menu[FILEMENU] = NewMenu(filemenu, "\PFile");
-
- AppendMenu(menu[FILEMENU], "\PNew…/N");
- AppendMenu(menu[FILEMENU], "\POpen…/O");
- AppendMenu(menu[FILEMENU], "\PClose");
- AppendMenu(menu[FILEMENU], "\PSave Configuration…");
- AppendMenu(menu[FILEMENU], "\P(-");
- AppendMenu(menu[FILEMENU], "\PType file name at cursor…");
- AppendMenu(menu[FILEMENU], "\P(-");
- AppendMenu(menu[FILEMENU], "\PSave screen as…");
- AppendMenu(menu[FILEMENU], "\PAppend screen to…");
- AppendMenu(menu[FILEMENU], "\PSave screen…");
- AppendMenu(menu[FILEMENU], "\PAppend screen…/S");
- AppendMenu(menu[FILEMENU], "\POpen Log…");
- AppendMenu(menu[FILEMENU], "\PLog session in ");
- AppendMenu(menu[FILEMENU], "\P(-");
- AppendMenu(menu[FILEMENU], "\PPage Layout…");
- AppendMenu(menu[FILEMENU], "\PPrint…/P");
- AppendMenu(menu[FILEMENU], "\P(-");
- AppendMenu(menu[FILEMENU], "\PQuit/Q");
-
- menu[EDITMENU] = NewMenu(editmenu, "\PEdit");
-
- AppendMenu(menu[EDITMENU], "\P(Undo/Z");
- AppendMenu(menu[EDITMENU], "\P(-");
- AppendMenu(menu[EDITMENU], "\PCut/X");
- AppendMenu(menu[EDITMENU], "\PCopy/C");
- AppendMenu(menu[EDITMENU], "\PPaste/V");
- AppendMenu(menu[EDITMENU], "\P(Clear");
- AppendMenu(menu[EDITMENU], "\PSelect All/A");
- AppendMenu(menu[EDITMENU], "\PTable Mode for Copy and Save/T");
-
- #ifdef USETEXTWINDOWS
- AppendMenu(menu[EDITMENU], "\P(-");
- AppendMenu(menu[EDITMENU], "\PAppend file to .edit window…");
- AppendMenu(menu[EDITMENU], "\PAppend screen to .edit window/B");
- AppendMenu(menu[EDITMENU], "\PRecord session/'");
- AppendMenu(menu[EDITMENU], "\PPage up/[");
- AppendMenu(menu[EDITMENU], "\PPage down/]");
- AppendMenu(menu[EDITMENU], "\PJump to end/;");
- #ifdef USETEXTWINDFIND
- AppendMenu(menu[EDITMENU], "\PFind…/F");
- AppendMenu(menu[EDITMENU], "\PFind same/G");
- #endif
- AppendMenu(menu[EDITMENU], "\PAdd Returns");
- AppendMenu(menu[EDITMENU], "\PRemove Returns");
- #else
- AppendMenu(menu[EDITMENU], "\P(-");
- AppendMenu(menu[EDITMENU], "\PAppend screen to Clipboard/B");
- AppendMenu(menu[EDITMENU], "\PLog session");
- #endif
-
- menu[WINDMENU] = NewMenu(windmenu, "\PWindow");
- AppendMenu(menu[WINDMENU], "\PClose session/W");
- AppendMenu(menu[WINDMENU], "\P(Re-open session/R");
- AppendMenu(menu[WINDMENU], "\PReconfigure session…");
- #ifdef USETEXTWINDOWS
- AppendMenu(menu[WINDMENU], "\PToggle .edit window/E");
- #else
- AppendMenu(menu[WINDMENU], "\P(Toggle .edit window/E");
- #endif
- AppendMenu(menu[WINDMENU], "\P(-");
-
- menu[NETWORKMENU] = NewMenu(netmenu, "\PTelnet");
-
- AppendMenu(menu[NETWORKMENU], "\PType my address at cursor");
- AppendMenu(menu[NETWORKMENU], "\PSend");
- AppendMenu(menu[NETWORKMENU], "\PShow statistics…");
- AppendMenu(menu[NETWORKMENU], "\PSend after Return");
- AppendMenu(menu[NETWORKMENU], "\PLocal echo");
- AppendMenu(menu[NETWORKMENU], "\P(-");
- {
- AppendMenu(menu[NETWORKMENU], "\P "); /* MYADDR */
- AppendMenu(menu[NETWORKMENU], "\P "); /* HOSTNAME */
- AppendMenu(menu[NETWORKMENU], "\P "); /* HOSTADDR */
- /* 1st, 2nd and 3rd are placeholders for my address & host name/address */
- }
-
- makecontrolmenu("\PControl");
-
- menu[PFKEYMENU] = GetMenu(pfkeymenu);
- menu[CURKEYMENU] = GetMenu(curkeymenu);
- /* we get these because 1) they're complex 2) users need to modify curkey */
-
- menu[HELPMENU] = NewMenu(helpmenu, "\PInfo");
- AppendMenu(menu[HELPMENU], "\PBackground…");
- AppendMenu(menu[HELPMENU], "\PASCII…");
- AppendMenu(menu[HELPMENU], "\PIBM…");
- AppendMenu(menu[HELPMENU], "\PMacros…");
- AppendMenu(menu[HELPMENU], "\PFile menu…");
- AppendMenu(menu[HELPMENU], "\PEdit menu…");
- AppendMenu(menu[HELPMENU], "\PWindow menu…");
- AppendMenu(menu[HELPMENU], "\PTelnet menu…");
- AppendMenu(menu[HELPMENU], "\PSerial menu…");
- AppendMenu(menu[HELPMENU], "\PControl menu…");
- AppendMenu(menu[HELPMENU], "\PASCII menu…");
- AppendMenu(menu[HELPMENU], "\PIBM PF menu…");
- AppendMenu(menu[HELPMENU], "\P(-");
- AppendMenu(menu[HELPMENU], "\P(Click to return");
- #ifdef USETEXTWINDOWS
- AppendMenu(menu[HELPMENU], "\P(-");
- AppendMenu(menu[HELPMENU], "\PDump Overview into .edit window");
- AppendMenu(menu[HELPMENU], "\PDump Menu Info into .edit window");
- #endif
-
- /* add the ASCII menus ... */
- menu[ASC1KEYMENU] = NewMenu(asc1keymenu, "\PASCII");
- AppendMenu(menu[ASC1KEYMENU], "\PName Option-…");
- AppendMenu(menu[ASC1KEYMENU], "\P(-");
- AppendMenu(menu[ASC1KEYMENU], "\PNUL @");
- AppendMenu(menu[ASC1KEYMENU], "\PSOH A");
- AppendMenu(menu[ASC1KEYMENU], "\PSTX B");
- AppendMenu(menu[ASC1KEYMENU], "\PETX C");
- AppendMenu(menu[ASC1KEYMENU], "\PEnd-of-Trans D");
- AppendMenu(menu[ASC1KEYMENU], "\PENO E");
- AppendMenu(menu[ASC1KEYMENU], "\PACK F");
- AppendMenu(menu[ASC1KEYMENU], "\PBell G");
- AppendMenu(menu[ASC1KEYMENU], "\PBackspace H");
- AppendMenu(menu[ASC1KEYMENU], "\PTab I");
- AppendMenu(menu[ASC1KEYMENU], "\PLineFeed J");
- AppendMenu(menu[ASC1KEYMENU], "\PVertical Tab K");
- AppendMenu(menu[ASC1KEYMENU], "\PForm Feed L");
- AppendMenu(menu[ASC1KEYMENU], "\PReturn M");
- AppendMenu(menu[ASC1KEYMENU], "\PSO N");
- AppendMenu(menu[ASC1KEYMENU], "\PSI O");
-
- menu[ASC2KEYMENU] = NewMenu(asc2keymenu, "\PASCII");
- AppendMenu(menu[ASC2KEYMENU], "\PName Option-…");
- AppendMenu(menu[ASC2KEYMENU], "\P(-");
- AppendMenu(menu[ASC2KEYMENU], "\PDLE P");
- AppendMenu(menu[ASC2KEYMENU], "\PXON Q");
- AppendMenu(menu[ASC2KEYMENU], "\PDC2 R");
- AppendMenu(menu[ASC2KEYMENU], "\PXOFF S");
- AppendMenu(menu[ASC2KEYMENU], "\PDC4 T");
- AppendMenu(menu[ASC2KEYMENU], "\PNAK U");
- AppendMenu(menu[ASC2KEYMENU], "\PSYN V");
- AppendMenu(menu[ASC2KEYMENU], "\PETB W");
- AppendMenu(menu[ASC2KEYMENU], "\PCAN X");
- AppendMenu(menu[ASC2KEYMENU], "\PEM Y");
- AppendMenu(menu[ASC2KEYMENU], "\PSUB Z");
- AppendMenu(menu[ASC2KEYMENU], "\PEscape [");
- AppendMenu(menu[ASC2KEYMENU], "\PFS \\");
- AppendMenu(menu[ASC2KEYMENU], "\PGS ]");
- AppendMenu(menu[ASC2KEYMENU], "\PRS 6");
- AppendMenu(menu[ASC2KEYMENU], "\PUS _");
- AppendMenu(menu[ASC2KEYMENU], "\PDelete is Backspace");
-
- for (count = 0; count < NIBMMENUS; count++)
- InsertMenu(menu[count], 0);
-
- menu[SERIALMENU] = NewMenu(serialmenu, "\PSerial");
- AppendMenu(menu[SERIALMENU], "\PSytek Escape");
- AppendMenu(menu[SERIALMENU], "\PHang up on Close");
- AppendMenu(menu[SERIALMENU], "\P<UBaud Rate");
- AppendMenu(menu[SERIALMENU], "\P 57600");
- AppendMenu(menu[SERIALMENU], "\P 38400");
- AppendMenu(menu[SERIALMENU], "\P 19200");
- AppendMenu(menu[SERIALMENU], "\P 9600");
- AppendMenu(menu[SERIALMENU], "\P 4800");
- AppendMenu(menu[SERIALMENU], "\P 2400");
- AppendMenu(menu[SERIALMENU], "\P 1200");
- AppendMenu(menu[SERIALMENU], "\P 300");
- AppendMenu(menu[SERIALMENU], "\P<UData Bits");
- AppendMenu(menu[SERIALMENU], "\P 8");
- AppendMenu(menu[SERIALMENU], "\P 7");
- AppendMenu(menu[SERIALMENU], "\P 6");
- AppendMenu(menu[SERIALMENU], "\P<UParity Bits");
- AppendMenu(menu[SERIALMENU], "\P None");
- AppendMenu(menu[SERIALMENU], "\P Even");
- AppendMenu(menu[SERIALMENU], "\P Odd");
- AppendMenu(menu[SERIALMENU], "\P<UStop Bits");
- AppendMenu(menu[SERIALMENU], "\P 2");
- AppendMenu(menu[SERIALMENU], "\P 1.5");
- AppendMenu(menu[SERIALMENU], "\P 1");
- AppendMenu(menu[SERIALMENU], "\P(-");
- AppendMenu(menu[SERIALMENU], "\PHang up phone");
- AppendMenu(menu[SERIALMENU], "\PReset Parameter RAM");
-
- /* make the hierarchical menus */
-
- /* font sizes */
- if (environs.systemVersion) {
- /* skip hierarchical menus if not up to Vol 5 */
- /* make the Size menu */
-
- menu[FSIZEMENU] = NewMenu(fsizemenu, "\P");
- AppendMenu(menu[FSIZEMENU], "\P9;12;16"); /* FONTSIZECOUNT = 3 */
- InsertMenu(menu[FSIZEMENU], -1);
- SetItemCmd(menu[CTRLMENU], MFONTSIZE, (char) 0x1B);
- /* indicate hierarchical */
- SetItemMark(menu[CTRLMENU], MFONTSIZE, (char) fsizemenu);
- /* attach font size menu */
-
- /* make the Telnet Send menu */
- menu[SENDMENU] = NewMenu(sendmenu, "\P");
-
- AppendMenu(menu[SENDMENU], "\PErase character");
- AppendMenu(menu[SENDMENU], "\PErase line");
- AppendMenu(menu[SENDMENU], "\PAre you there");
- AppendMenu(menu[SENDMENU], "\PInterrupt process");
- AppendMenu(menu[SENDMENU], "\PAbort output");
- AppendMenu(menu[SENDMENU], "\PBreak");
-
- SetItemCmd(menu[NETWORKMENU], SENDHIER, (char) 0x1B);
- /* indicate hierarchical */
- SetItemMark(menu[NETWORKMENU], SENDHIER, (char) sendmenu);
- /* attach send menu */
-
- #ifdef USESERSEND
- /* make the Serial Send menu */
- menu[SERSENDMENU] = NewMenu(serialsendmenu, "\P");
-
- AppendMenu(menu[SERSENDMENU], "\PSytek Escape");
- AppendMenu(menu[SERSENDMENU], "\PAlt. Sytek Escape");
-
- SetItemCmd(menu[SERIALMENU], SERSENDHIER, (char) 0x1B);
- /* indicate hierarchical */
- SetItemMark(menu[SERIALMENU], SERSENDHIER, (char) serialsendmenu);
- /* attach serial send menu */
- #endif
- }
- else {
- DisableItem(menu[CTRLMENU], MFONTSIZE);
- DisableItem(menu[NETWORKMENU], SENDHIER);
- #ifdef USESERSEND
- DisableItem(menu[SERIALMENU], SERSENDHIER);
- #endif
- }
-
- if (!environs.hasColorQD) {
- /* turn off if color not present */
- DisableItem(menu[CTRLMENU], MSETCOLOR);
- }
- DrawMenuBar();
- }
-
-
- /*
- fix the menu to show the current connection control menu
- serial, network or conn mgr; return TRUE if menu bar
- needs to be drawn.
- */
-
- setmenuconn(twp)
- struct winds * twp;
- {
- static int oconntype = -1;
- static int oconnmenu1 = 0;
- static int oconnmenu2 = 0;
- int retval = FALSE;
-
- #ifdef SOMEHOW
- /* make the window name the title on the Control menu */
- DeleteMenu(ctrlMenu);
- HLock(keydp->hhostname);
- makecontrolmenu(*keydp->hhostname);
- HUnlock(keydp->hhostname);
- InsertMenu(menu[CTRLMENU], netmenu);
- #endif
-
- if (oconntype == twp->conntype) {
- /* already set OK, never the first time */
- if (twp->conntype == CONN_MACTCP
- || twp->conntype == CONN_CUTCP) {
-
- /* put the host/window name into the menu */
- setmenuaddresses(twp->hhostname, &twp->fhost);
- }
-
- return(FALSE);
- }
-
- if (oconnmenu1) {
- DeleteMenu(oconnmenu1);
- oconnmenu1 = 0;
- retval = TRUE;
- }
- if (oconnmenu2) {
- DeleteMenu(oconnmenu2);
- oconnmenu2 = 0;
- retval = TRUE;
- }
- switch (twp->conntype) {
- case CONN_CUTCP:
- case CONN_MACTCP: {
- InsertMenu(menu[NETWORKMENU], ctrlmenu);
- InsertMenu(menu[SENDMENU], -1);
- setmenuaddresses(twp->hhostname, &twp->fhost);
- oconntype = twp->conntype;
- oconnmenu1 = netmenu;
- oconnmenu2 = sendmenu;
- retval = TRUE;
- break;
- }
- case CONN_SERD: {
- InsertMenu(menu[SERIALMENU], ctrlmenu);
- #ifdef USESERSEND
- InsertMenu(menu[SERSENDMENU], -1);
- #endif
- oconntype = CONN_SERD;
- oconnmenu1 = serialmenu;
- oconnmenu2 = 0;
- retval = TRUE;
- break;
- }
- case CONN_COMMMGR: {
- break;
- }
- }
- return(retval);
- }
-
-
- /* fix the menu to accord with the current settings */
-
- menucheck(twp)
- struct winds * twp;
- {
- int keymchange;
- int setmchange;
- int setconnchange;
-
- CheckItem(menu[FILEMENU], FILESESSION, twp->filesession ? TRUE : FALSE);
- CheckItem(menu[EDITMENU], LOGSESSION, twp->logsession ? TRUE : FALSE);
- CheckItem(menu[CTRLMENU], KEYXON, twp->dokeymacros ? TRUE : FALSE);
-
- setsendm(twp->ucb.u_sendm);
- setmenureturn(twp);
- setmecho(twp->ucb.u_echom);
-
- pfmenuhack(twp); /* IBM menu PF keys */
- selmenuitems(twp); /* selection/screen */
- setfontsizemenu(twp->fontsize); /* font size */
-
- keymchange = keymenus(twp);
- setmchange = setmsession(twp);
- setconnchange = setmenuconn(twp);
-
- if (keymchange || setmchange || setconnchange)
- return(TRUE);
- else
- return(FALSE);
- }
-
-
- /* ignore all files that were not created by this program */
-
- pascal Boolean
- SFgetfilter(finfopb)
- ParmBlkPtr finfopb;
- {
- #ifdef USETASK
- if (tk_cur != NULL) {
- /* if tasking is on, do a yield to avoid timeout */
- bkrd_service();
- }
- #endif
-
- if (finfopb->u.fp.ioFlFndrInfo.fdCreator == '3278')
- /* FALSE means *show* */
- return((Boolean) FALSE);
- else
- return((Boolean) TRUE);
- }
-
-
- /* examine all files */
-
- pascal Boolean
- SFnofilter(finfopb)
- ParmBlkPtr finfopb;
- {
- #ifdef USETASK
- if (tk_cur != NULL) {
- /* if tasking is on, do a yield to avoid timeout */
- bkrd_service();
- }
- #endif
-
- return((Boolean) FALSE);
- }
-
-
-
- /* handle File menu items */
-
- menufile(theitem)
- short theitem;
- {
- switch (theitem) {
- case NEWCONN: {
- newconn();
- break;
- }
- case OPENCONN: {
- Point here;
- SFReply openreply;
- SFTypeList typelist;
-
- getcontext(keydp);
-
- if (chkbackground())
- break;
-
- openreply.good = FALSE;
- emwdeactivate();
-
- here.v = 60;
- here.h = 100;
- centerpoint(&here);
-
- typelist[0] = 'TEXT';
- modaldialog = TRUE;
-
- SFGetFile(pass(here), "\POpen Session Document",
- (ProcPtr) SFgetfilter, 1, &typelist, (ProcPtr) NULL, &openreply);
-
- modaldialog = FALSE;
- if (openreply.good) {
- /* stick name in at cursor position */
- char * chp;
- char * endp;
- char * destp;
- struct token atoke;
- short newresfid;
-
- SetVol((StringPtr) NULL, openreply.vRefNum);
- if ((newresfid = myopenresfile(&openreply.fName, (short) openreply.vRefNum, (Byte) fsRdWrPerm)) == -1) {
- /* can't open file, give up */
- error("Can't open the document");
- break;
- }
- /* we got a file, make a connection */
-
- if (makeconn()) {
- closeconfig(emdp);
- error("Not enough memory for new session");
- break;
- }
- /* emdp is now points to a new blank connection record */
-
- /* copy the file ids */
-
- emdp->resfid = newresfid;
- #ifdef MFOPENWORKS
- /* SFSaveDisk & CurDirStore don't seem to be set on MF doc
- launches... */
- emdp->resvref = openreply.vRefNum;
- emdp->resvol = -(*SFSaveDisk);
- emdp->resdir = *CurDirStore;
-
- emdp->downvref = openreply.vRefNum;
- emdp->downvol = -(*SFSaveDisk);
- emdp->downdir = *CurDirStore;
- #else
- setemdpresvol();
- #endif
- /* copy the name & other info into the appfile struct */
- chp = &openreply.fName[0];
- endp = chp + openreply.fName[0] + 1;
- destp = &emdp->appfile.fName;
-
- while (chp < endp) {
- *destp++ = *chp++;
- }
-
- getconfig();
-
- PtrToHand(&emdp->appfile.fName, &emdp->hhostname,
- (long) (emdp->appfile.fName.length + 1));
- /* save name as pascal string in emdp->hhostname */
-
- if (optkeydown()) {
- /* give user the opportunity to revise the configuration */
- if (namewindow()) {
- /* continue if Cancelled */
- ;
- }
- }
- if (emdp->conntype == CONN_MACTCP
- || emdp->conntype == CONN_CUTCP) {
- /* on startup, get the null-terminated c string from the resource file */
- if (emdp->hlasthost != NULL) {
- HLock(emdp->hlasthost);
- if (resolve_name(*emdp->hlasthost, &emdp->fhost)) {
- HUnlock(emdp->hlasthost);
- if (namewindow()) {
- /* give the user a chance to fix things */
- closeconfig(emdp); /* close after getting resources */
- killconn();
- break;
- }
- }
- HUnlock(emdp->hlasthost);
- }
- else {
- if (namewindow()) {
- /* bad address, give the user a chance to fix things */
- closeconfig(emdp); /* close after getting resources */
- killconn();
- break;
- }
- }
- }
- if (makewind()) {
- /* out of memory */
- closeconfig(emdp);
- killconn();
- break;
- }
- keyxinit();
-
- addwindmenu(emwindow);
-
- closeconfig(emdp); /* close after getting resources */
-
- openconn(emdp);
- }
- break;
- }
- case WMCLOSEWIND: {
- getcontext(keydp);
- if (keydp->connopen) {
- if (querycloseconn(keydp))
- /* user doesn't want to end session */
- return();
-
- closeconn(keydp);
- if (keydp->disposeonclose) {
- /* better not do queryclosewind() AGAIN */
- return();
- }
- else {
- /* wait to kill window until truly closed */
- while (emdp->connopen)
- bkrd_service();
- }
- }
- queryclosewind(emdp);
- return();
- }
- case FILENAME: {
- /* type a filename from GetFile into the 3270 screen */
- Point here;
- SFReply sftypereply;
- SFTypeList typelist;
-
- if (chkbackground())
- break;
-
- sftypereply.good = FALSE;
- emwdeactivate();
-
- here.v = 60;
- here.h = 100;
- centerpoint(&here);
-
- typelist[0] = 'TEXT';
-
- getcontext(keydp);
- modaldialog = TRUE;
-
- *SFSaveDisk = - emdp->downvol;
- *CurDirStore = emdp->downdir;
-
- /* TODO kevin should have application name if not launched from document */
- SFGetFile(pass(here), "\PType file name at cursor",
- (ProcPtr) SFnofilter, 1, &typelist, (ProcPtr) NULL, &sftypereply);
-
- modaldialog = FALSE;
- if (sftypereply.good) {
- /* stick name in at cursor position */
- char * chp;
- char * endp;
- struct token atoke;
- WDPBRec WDPB;
-
- SetVol((StringPtr) NULL, sftypereply.vRefNum);
- emdp->downvref = sftypereply.vRefNum;
-
- WDPB.ioCompletion = NULL;
- WDPB.ioNamePtr = NULL;
- PBHGetVol(&WDPB, (Boolean) FALSE);
- emdp->downvol = WDPB.ioWDVRefNum;
- emdp->downdir = WDPB.ioWDDirID;
- /* save for the next SFget dialog */
-
- pastemode = 1;
- chp = &sftypereply.fName[1];
- endp = chp + sftypereply.fName[0];
-
- atoke.class = RSLT_ASCI;
- while (chp < endp) {
- atoke.entry = *chp++;
- keyputaction(RSLT_ASCI, atoke.entry);
- }
- pastemode = 0;
- }
- break;
- }
- case APPENDSCREEN: {
- getcontext(keydp);
- savetext(RF_APPEND);
- break;
- }
- case SAVESCREEN: {
- getcontext(keydp);
- savetext(RF_SAVE);
- break;
- }
- case APPENDSCREENTO: {
- getcontext(keydp);
- savetext(RF_APPENDTO);
- break;
- }
- case SAVESCREENAS: {
- getcontext(keydp);
- savetext(RF_SAVEAS);
- break;
- }
- case LOGOPEN: {
- getcontext(keydp);
- if (logopen()) {
- /* turn logging on automatically... */
- keydp->filesession = TRUE;
- keydp->confchanged = TRUE;
- CheckItem(menu[FILEMENU], FILESESSION, keydp->filesession ? TRUE : FALSE);
- }
- break;
- }
- case FILESESSION: {
- keydp->filesession = !keydp->filesession;
- keydp->confchanged = TRUE;
- CheckItem(menu[FILEMENU], FILESESSION, keydp->filesession ? TRUE : FALSE);
- break;
- }
- case PRINTQD: {
- getcontext(keydp);
- #ifdef DOQDPRINT
- QDprinttext(keydp->edit ? RF_PRINTTEXT : RF_PRINTSCREEN, TRUE);
- /* print with a dialog */
- #else
- printtext(RF_PRINTSCRAP);
- #endif
-
- break;
- }
- #ifdef USEDRAFT
- case PRINTSCREEN: {
- getcontext(keydp);
- printtext(RF_PRINTSCREEN);
- break;
- }
- #endif
- #ifdef DOQDPRINT
- case PRINTLAYOUT: {
- /* doing the print style dialog... */
- extern THPrint hprec;
-
- getcontext(keydp);
- if (hprec == NULL) {
- hprec = NewHandle((long) sizeof(TPrint));
- PrintDefault(hprec);
- if (hprec == NULL)
- return(-1);
- }
- PrOpen();
- if (PrError()) {
- error("Can't open Printer Driver");
- break;
- }
- PrStlDialog(hprec);
- PrClose();
- break;
- }
- #endif
- case SAVECONF: {
- /* save the current window's configuration in a document file */
- getcontext(keydp);
- if (optkeydown()) {
- namewindow();
- }
- saveconfig(keydp, creator);
-
- break;
- }
- case QUIT: {
- short notapproved = TRUE;
- short oneleft;
- /* general purpose GetDItem vars */
-
- struct winds ** conp = conns;
- struct winds * conend = &conp[conncount];
- register struct winds * twp;
-
- appclosing = TRUE;
-
- /* go through window list to see who needs service */
- /* TODO disable window items as we go in case notapproved later... */
- while (conp < conend) {
- twp = *conp++;
- if (twp == NULL)
- continue;
-
- getcontext(twp);
- if (queryconfchange(twp))
- goto QUITABORT;
-
- if (!twp->connopen)
- continue;
-
- if (twp->conntype == CONN_MACTCP
- || twp->conntype == CONN_CUTCP) {
-
- if (querycloseconn(twp))
- goto QUITABORT;
-
- twp->userquit = TRUE;
-
- if (twp->conntype == CONN_MACTCP)
- mactcp_close();
- #ifdef DUALTCP
- else
- tcp_close();
- #endif
- twp->ucb.u_state = CLOSING;
- twp->ucb.u_rstate = BLOCK;
- bkrd_service();
- }
- else if (twp->conntype == CONN_SERD) {
- if (querycloseconn(twp))
- goto QUITABORT;
-
- closeserport(twp);
- cls_usr();
- }
- }
-
- /* sometimes MacTCP fails to call the ASR to set mtevent & closeflag
- and leaves us hanging in this loop? */
- /* loop for a while until close legitimately */
- while (TRUE) {
- oneleft = FALSE;
- for (conp = conns; conp < conend; ) {
- twp = *conp++;
- if (twp == NULL)
- continue;
-
- if (twp->connopen)
- oneleft = TRUE;
- }
- if (!oneleft)
- break;
- bkrd_service();
- }
-
- /* release the streams or whatever... */
- for (conp = conns; conp < conend; ) {
- twp = *conp++;
- if (twp == NULL)
- continue;
-
- getcontext(twp);
-
- if (twp->conntype == CONN_MACTCP) {
- tcp_release(twp);
- }
- #ifdef DUALTCP
- else if (twp->conntype == CONN_CUTCP) {
- /* cleanup is automatic via exit_hooks */
- ;
- }
- #endif
- /* TODO tftp ? */
- }
- sercleanup();
- cu_exit(0);
- break;
- }
- default:
- break;
- }
- return;
-
- QUITABORT:
- appclosing = FALSE;
- return;
- }
-
-
- /* handle edit menu commands; emwindow commands put on q, text handled promptly */
-
- #ifdef USETEXTWINDFIND
- #define FINDMAX 1000
- #define FORWARD 1
- #define BACKWARD 2
- #endif
-
- menuedit(theItem)
- short theItem;
- {
- switch (theItem) {
- case EDCUT: {
- if (keydp->edit) {
- textwcut(keydp);
- if (mfpresent)
- /* make sure mf updates all client's scrap info */
- SystemEdit(EDCOPY - 1);
- }
- else {
- getcontext(keydp);
- stdedit((unsigned char) ED_COPY);
- /* won't handle cut so just do a copy */
- }
- break;
- }
- case EDCLEAR: {
- if (keydp->edit) {
- textwclear(keydp);
- }
- break;
- }
- case EDCOPY: {
- if (keydp->edit) {
- /* we're in text editor, do it the easy way TODO should support append */
- textwcopy(keydp);
- if (mfpresent)
- /* make sure mf updates all client's scrap info */
- SystemEdit(EDCOPY - 1);
- }
- else {
- getcontext(keydp);
- stdedit((unsigned char) ED_COPY);
- /* won't handle cut so just do a copy */
- }
- break;
- }
- case EDPASTE: {
- if (keydp->edit) {
- textwpaste(keydp);
- }
- else
- keyputaction(RSLT_EDIT, ED_PASTE);
- /* do this on the q because it interacts with host */
- break;
- }
- case EDSELALL: {
- if (keydp->edit) {
- tesetsel( (long) 0, (long) (*keydp->texthand)->teLength, keydp->texthand);
- }
- else {
- getcontext(keydp);
- stdedit((unsigned char) ED_SELALL);
- /* won't handle cut so just do a copy */
- }
- break;
- }
- case EDLOAD: {
- /* append a file selected by the user to the .edit window */
- Point here;
- SFReply sftypereply;
- SFTypeList typelist;
-
- if (chkbackground())
- break;
-
- sftypereply.good = FALSE;
- emwdeactivate();
-
- here.v = 60;
- here.h = 100;
- centerpoint(&here);
-
- typelist[0] = 'TEXT';
-
- getcontext(keydp);
- modaldialog = TRUE;
-
- *SFSaveDisk = - emdp->downvol;
- *CurDirStore = emdp->downdir;
-
- /* TODO kevin should have application name if not launched from document */
- SFGetFile(pass(here), "\PAppend file to .edit window",
- (ProcPtr) SFnofilter, 1, &typelist, (ProcPtr) NULL, &sftypereply);
-
- modaldialog = FALSE;
- if (sftypereply.good) {
- /* stick name in at cursor position */
- char * chp;
- char * endp;
- struct token atoke;
- WDPBRec WDPB;
-
- SetVol((StringPtr) NULL, sftypereply.vRefNum);
- emdp->downvref = sftypereply.vRefNum;
-
- WDPB.ioCompletion = NULL;
- WDPB.ioNamePtr = NULL;
- PBHGetVol(&WDPB, (Boolean) FALSE);
- emdp->downvol = WDPB.ioWDVRefNum;
- emdp->downdir = WDPB.ioWDDirID;
- /* modify the download directory, save for the next SFget dialog */
-
- ptoc(&sftypereply.fName[0]);
- textwload(&sftypereply.fName[0]);
- ctop(&sftypereply.fName[0]);
- }
- break;
- }
- case EDAPPEND: {
- getcontext(keydp);
- stdedit((unsigned char) ED_APPEND);
- break;
- }
- case EDTABLEMODE: {
- /* toggle the copy table mode */
- keydp->copytable = !keydp->copytable;
- CheckItem(menu[EDITMENU], EDTABLEMODE, keydp->copytable ? TRUE : FALSE);
- break;
- }
- case LOGSESSION: {
- getcontext(keydp);
- keydp->logsession = !keydp->logsession;
- CheckItem(menu[EDITMENU], LOGSESSION, keydp->logsession ? TRUE : FALSE);
- showtape();
- break;
- }
- #ifdef USETEXTWINDOWS
- #ifdef USETEXTWINDFIND
- /* possibly no one will approve of adding a search feature anyway... */
-
- case EDFINDSEL: /* really find same... */
- #ifdef REALLYFINDSEL
- texthand = keydp->texthand;
- selstart = (*texthand)->selStart;
- selend = (*texthand)->selEnd;
- if (selstart != selend) {
- /* if text selected, copy select range to string buffer */
- textncopy(*(*texthand)->hText + selstart, fstring,
- selend - selstart, FINDMAX);
- }
- #else
- if (fstring[0] == '\000')
- /* the search string hasn't been set yet, do dialog */
- theItem = EDFIND;
- #endif
- case EDFIND: {
- /* present a dialog to get the string to find */
- TEHandle texthand; /* top window text record */
- long loc, count;
- int selstart, selend;
- int direction;
-
- texthand = keydp->texthand;
- selstart = (*texthand)->selStart;
- selend = (*texthand)->selEnd;
-
- if (theItem == EDFIND) {
- /* use the selection (if it exists) in the find dialog */
- texthand = keydp->texthand;
- selstart = (*texthand)->selStart;
- selend = (*texthand)->selEnd;
- if (selstart != selend) {
- /* if text selected, copy select range to string buffer */
- textncopy(*(*texthand)->hText + selstart, &fstring[0],
- selend - selstart, FINDMAX);
- }
- }
- if (myEvent.modifiers & shiftKey) {
- direction = BACKWARD;
- if (theItem == EDFIND) {
- if (querytext("Search back in edit window for:", &fstring[0]))
- break;
- }
- }
- else {
- direction = FORWARD;
- if (theItem == EDFIND) {
- if (querytext("Search in edit window for:", &fstring[0]))
- break;
- }
- }
-
- if ( (count = findstring(texthand, &loc, direction)) > 0) {
- /* found a match of the fstring */
- tesetsel(loc, (long) (loc + count), texthand);
- }
- else {
- /* reset selection to insertion point and beep to indicate failure */
- tesetsel((long) (*texthand)->selStart,
- (long) (*texthand)->selStart, texthand);
- SysBeep(30);
- }
-
- SelView(keydp);
- break;
- }
- #endif
- case EDGOTOEND: {
- #ifdef BRINGTEXTUP
- if (keywindow == keydp->emwindow) {
- if (keydp->hidetextwindow) {
- keydp->hidetextwindow = FALSE;
- }
- selectwindow(keydp->textwindow);
- ShowWindow(keydp->textwindow);
- }
- #endif
- textwgotoend(keydp);
- break;
- }
- case EDPAGEUP: {
- WindowPtr oport;
-
- GetPort(&oport);
- SetPort(keydp->textwindow);
- ScrollToLine(keydp, max( 0, min( keydp->FirstLine + -keydp->textlines, ScrollMax(keydp) ) ) );
- SetPort(oport);
- break;
- }
- case EDPAGEDOWN: {
- WindowPtr oport;
-
- GetPort(&oport);
- SetPort(keydp->textwindow);
- ScrollToLine(keydp, max( 0, min( keydp->FirstLine + keydp->textlines, ScrollMax(keydp) ) ) );
- SetPort(oport);
- break;
- }
- case EDWRAP: {
- textwwrap(keydp);
- break;
- }
- case EDUNWRAP: {
- textwunwrap(keydp);
- break;
- }
- #endif
- default:
- return;
- }
- }
-
-
-
- menunetwork(theItem)
- short theItem;
- {
- switch (theItem) {
- case SENDADDR: {
- /* echo our address to the host */
- char buffer[25];
-
- if (rnet == NULL)
- break;
-
- getcontext(keydp);
- sprintf(buffer, "%a", rnet->ip_addr);
- (*keydp->sendstr)(buffer);
- break;
- }
- case NETSTAT: {
- if (keydp->conntype == CONN_MACTCP)
- mactcp_status();
- #ifdef DUALTCP
- else if (keydp->conntype == CONN_CUTCP)
- tc_status();
- #endif
- break;
- }
- case ENDOFLINE: {
- if (keydp->ucb.u_sendm != NEWLINE) {
- setsendm(NEWLINE);
- keydp->ucb.u_sendm = NEWLINE;
- }
- else {
- setsendm(EVERYC);
- keydp->ucb.u_sendm = EVERYC;
- }
- break;
- }
- case LOCALECHO: {
- if (keydp->ucb.u_echom != REMOTE) {
- echoremote(&keydp->ucb);
- keydp->ucb.u_echongo = RECHOREQ;
- }
- else {
- echolocal(&keydp->ucb);
- keydp->ucb.u_echongo = LECHOREQ;
- break;
- }
- setmecho(keydp->ucb.u_echom);
- break;
- }
- }
- }
-
- menusersend(theItem)
- short theItem;
- {
- getcontext(keydp);
- switch (theItem) {
- case SYTEKESCAPE: {
- (*emdp->putchar)(CTLA);
- (*emdp->putchar)(CTLB);
- break;
- }
- case ALTSYTEKESCAPE: {
- (*emdp->putchar)(CTLA);
- (*emdp->putchar)(CTLB);
- break;
- }
- }
- }
-
-
- menusend(theItem)
- short theItem;
- {
- getcontext(keydp);
-
- switch (theItem) {
- case YOUTHERE: {
- (*keydp->putchar)(TNIAC);
- (*keydp->putchar)(TNAYT);
- (*keydp->putflush)();
- break;
- }
- case ABORT: {
- (*keydp->putchar)(TNIAC);
- (*keydp->putchar)(TNAO);
- (*keydp->putflush)();
- break;
- }
- case BREAK: {
- sendBreak();
- (*keydp->putflush)();
- break;
- }
- case ERASECHAR: {
- if (emdp->ibm_mode)
- /* handle this telnet NVT function locally for 3270 */
- menucurkey(MBS);
- else {
- (*keydp->putchar)(TNIAC);
- (*keydp->putchar)(TNERCH);
- (*keydp->putflush)();
- }
- break;
- }
- case ERASELINE: {
- if (emdp->ibm_mode)
- /* handle this telnet NVT function locally for 3270 */
- menucurkey(MERASEINPUT);
- else {
- (*keydp->putchar)(TNIAC);
- (*keydp->putchar)(TNERLN);
- (*keydp->putflush)();
- }
- break;
- }
- case INTERRUPT: {
- (*keydp->putchar)(TNIAC);
- (*keydp->putchar)(TNINT);
- (*keydp->putchar)(TNIAC);
- (*keydp->putchar)(TNDM);
- mtcpurgent();
- (*keydp->putflush)();
- mtcpclrurgent();
- dotcpurgent(); /* for Cornell */
- break;
- }
- default:
- ;
- }
- }
-
-
-
- /* handle menu items producing ibm 7171 key sequences--cursor motion */
-
- menucurkey(theItem)
- short theItem;
- {
- switch(theItem) {
- case MNEWLINE: {
- keyputaction(RSLT_MVCR, NEW_LINE);
- break;
- }
- case MINSERT: {
- keyputaction(RSLT_LCAC,INSRT);
- break;
- }
- case MRESET: {
- sendReset();
- break;
- }
- case MBS: {
- if (keydp->event_reg & INSERT) {
- keyputaction(RSLT_LCAC, BACKSP_DEL);
- }
- else {
- keyputaction(RSLT_LCAC, BACKSP_BLANK);
- }
- break;
- }
- case MBSDEL: {
- keyputaction(RSLT_LCAC, BACKSP_DEL);
- break;
- }
- case MBSBLANK: {
- keyputaction(RSLT_LCAC, BACKSP_BLANK);
- break;
- }
- case MDEL: {
- keyputaction(RSLT_LCAC,DEL_CHAR);
- break;
- }
- case MTAB: {
- keyputaction(RSLT_MVCR, TAB_FWD);
- break;
- }
- case MBACKTAB: {
- keyputaction(RSLT_MVCR, BACK_TAB);
- break;
- }
- case MUP: {
- keyputaction(RSLT_MVCR,UP_ARROW);
- break;
- }
- case MDOWN: {
- keyputaction(RSLT_MVCR,DOWN_ARROW);
- break;
- }
- case MLEFT: {
- keyputaction(RSLT_MVCR,LEFT_ARROW);
- break;
- }
- case MRIGHT: {
- keyputaction(RSLT_MVCR,RIGHT_ARROW);
- break;
- }
- case MHOME: {
- keyputaction(RSLT_MVCR,HOME);
- break;
- }
- case MERASEINPUT: {
- keyputaction(RSLT_LCAC,INPUT_ERASE);
- break;
- }
- case MERASEEOF: {
- keyputaction(RSLT_LCAC,ERASE_EOF);
- break;
- }
- }
- }
-
-
-
- /* handle menu items producing ibm 7171 key sequences--pf keys */
-
- menupfkey(theItem)
- short theItem;
- {
- if (theItem < MPF1) {
- switch (theItem) {
- case MENTER: {
- keyputaction(RSLT_PFKY, ENTER);
- break;
- }
- case MPA1: {
- keyputaction(RSLT_PFKY,PA1);
- break;
- }
- case MPA2: {
- keyputaction(RSLT_PFKY,PA2);
- break;
- }
- case MPA3: {
- keyputaction(RSLT_PFKY,PA3);
- break;
- }
- case MCLEAR: {
- keyputaction(RSLT_PFKY,CLEAR);
- break;
- }
- }
- return;
- }
- if (myEvent.modifiers & shiftKey)
- /* do a shift */
- keyputaction(RSLT_PFKY, PFSHIFT);
- switch (theItem) {
- case MPF1: {
- keyputaction(RSLT_PFKY,PF1);
- break;
- }
- case MPF2: {
- keyputaction(RSLT_PFKY,PF2);
- break;
- }
- case MPF3: {
- keyputaction(RSLT_PFKY,PF3);
- break;
- }
- case MPF4: {
- keyputaction(RSLT_PFKY,PF4);
- break;
- }
- case MPF5: {
- keyputaction(RSLT_PFKY,PF5);
- break;
- }
- case MPF6: {
- keyputaction(RSLT_PFKY,PF6);
- break;
- }
- case MPF7: {
- keyputaction(RSLT_PFKY,PF7);
- break;
- }
- case MPF8: {
- keyputaction(RSLT_PFKY,PF8);
- break;
- }
- case MPF9: {
- keyputaction(RSLT_PFKY,PF9);
- break;
- }
- case MPF10: {
- keyputaction(RSLT_PFKY,PF10);
- break;
- }
- case MPF11: {
- keyputaction(RSLT_PFKY,PF11);
- break;
- }
- case MPF12: {
- keyputaction(RSLT_PFKY,PF12);
- break;
- }
- default:
- break;
- }
- }
-
-
-
- /* do disgusting things with the menu as the key interpretation shifts
- around to account for the loss of Enter on Mac +, etc.
-
- this routine is included in all three applications due to menu differences
- */
-
- pfmenuhack(twp)
- struct winds * twp;
- {
- if (keyboard == OLDKEYBOARD) {
- SetItem(menu[PFKEYMENU], MPA1, "\PPA1 SH-Enter");
- SetItem(menu[PFKEYMENU], MPA2, "\PPA2 Enter");
- SetItem(menu[PFKEYMENU], MPA3, "\PPA3 \021Enter");
- SetItem(menu[PFKEYMENU], MCLEAR, "\PClear OP-Enter");
- }
- else {
- /* mac + keyboard */
- switch (twp->keypad) {
- case NORMKEYPAD: {
- SetItem(menu[PFKEYMENU], MPA1, "\PPA1");
- SetItem(menu[PFKEYMENU], MPA2, "\PPA2");
- SetItem(menu[PFKEYMENU], MPA3, "\PPA3");
- SetItem(menu[PFKEYMENU], MCLEAR, "\PClear Clear");
- break;
- }
- case KEYPAD1: {
- SetItem(menu[PFKEYMENU], MPA1, "\PPA1 KP *");
- SetItem(menu[PFKEYMENU], MPA2, "\PPA2 KP -");
- SetItem(menu[PFKEYMENU], MPA3, "\PPA3 \021KP -");
- SetItem(menu[PFKEYMENU], MCLEAR, "\PClear KP +");
- break;
- }
- case KEYPAD3:
- case KEYPAD2: {
- SetItem(menu[PFKEYMENU], MPA1, "\PPA1 SH-KP 0");
- SetItem(menu[PFKEYMENU], MPA2, "\PPA2 KP 0");
- SetItem(menu[PFKEYMENU], MPA3, "\PPA3 \021KP 0");
- SetItem(menu[PFKEYMENU], MCLEAR, "\PClear OP-KP 0");
- break;
- }
- }
- }
- }
-
-
- setmenuaddresses(hhostname, hostp)
- StringHandle hhostname;
- struct hostsock * hostp;
- {
- char buffer[255];
-
- if (rnet == NULL)
- return;
-
- sprintf(buffer, "My Address -- %a", rnet->ip_addr);
- ctop(buffer);
- SetItem(menu[NETWORKMENU], MYADDR, buffer);
-
- HLock(hhostname);
- ptoc(*hhostname);
- sprintf(buffer, "Host: %s", *hhostname);
- ctop(*hhostname);
- HUnlock(hhostname);
-
- ctop(buffer);
- SetItem(menu[NETWORKMENU], HOSTNAME, buffer);
-
- sprintf(buffer, "Host Address -- %a", hostp->u.addr);
- ctop(buffer);
- SetItem(menu[NETWORKMENU], HOSTADDR, buffer);
-
- /* TODO find gateway address for MacTCP */
- #ifdef DUALTCP
- if (emdp->conntype == CONN_CUTCP) {
- sprintf(buffer, "Gateway Address -- %a", rnet->n_defgw);
- ctop(buffer);
- SetItem(menu[NETWORKMENU], GATEADDR, buffer);
- }
- #endif
- }
-
-
- /* set/reset the session related menus; returns TRUE if menu bar needs
- redrawing */
-
- setmsession(twp)
- struct winds * twp;
- {
- static char menusession = 1;
- static char ibm_keymode = 1;
-
- if (twp->connopen == menusession && twp->ibm_keymode == ibm_keymode)
- /* first time, never */
- return(FALSE);
-
- menusession = twp->connopen;
- ibm_keymode = twp->ibm_keymode;
-
- if (twp->connopen) {
- /* a connection is open for the top window */
- #ifdef USEABORT
- EnableItem(menu[WINDMENU], REOPENCONN);
- SetItem(menu[WINDMENU], OPENCONN, "\PClose session");
- #else
- EnableItem(menu[WINDMENU], CLOSECONN);
- DisableItem(menu[WINDMENU], REOPENCONN);
- #endif
-
- EnableItem(menu[SENDMENU], 0);
- if (twp->ibm_keymode) {
- EnableItem(menu[CURKEYMENU], 0);
- EnableItem(menu[PFKEYMENU], 0);
- }
- else {
- EnableItem(menu[ASC1KEYMENU], 0);
- EnableItem(menu[ASC2KEYMENU], 0);
- }
- }
- else {
- #ifdef USEABORT
- DisableItem(menu[WINDMENU], REOPENCONN);
- SetItem(menu[WINDMENU], CLOSECONN, "\PRe-open session");
- #else
- DisableItem(menu[WINDMENU], CLOSECONN);
- EnableItem(menu[WINDMENU], REOPENCONN);
- #endif
- /* SetItemCmd(menu[WINDMENU], CLOSECONN, (char) 'R'); */
-
- DisableItem(menu[SENDMENU], 0);
-
- if (twp->ibm_keymode) {
- DisableItem(menu[CURKEYMENU], 0);
- DisableItem(menu[PFKEYMENU], 0);
- }
- else {
- DisableItem(menu[ASC1KEYMENU], 0);
- DisableItem(menu[ASC2KEYMENU], 0);
- }
- }
- return(TRUE);
- }
-
-
- /* enable the ibm keys, can't do through setmesesssion, already fixed OK if ASCII */
-
- ibmkeyenable()
- {
- EnableItem(menu[CURKEYMENU], 0);
- EnableItem(menu[PFKEYMENU], 0);
- DrawMenuBar();
- }
-
-
- /* turn the "send" items in the network (telnet/serial) menu on or off */
-
- msetsendm(flag)
- short flag;
- {
- if (emdp->conntype == CONN_MACTCP
- || emdp->conntype == CONN_CUTCP) {
- if (flag)
- EnableItem(menu[SENDMENU], 0);
- else
- DisableItem(menu[SENDMENU], 0);
- }
- else if (emdp->conntype == CONN_SERD) {
- #ifdef USESERSEND
- if (flag)
- EnableItem(menu[SERSENDMENU], 0);
- else
- DisableItem(menu[SERSENDMENU], 0);
- #else
- if (flag)
- EnableItem(menu[SERIALMENU], 1);
- else
- DisableItem(menu[SERIALMENU], 1);
- #endif
- }
- }
-
-
- /* change the emulator edit menu as we are activated/deactivated */
-
- emedit(twp, flag)
- struct winds * twp;
- short flag;
- {
- if (twp == NULL)
- twp = emdp;
-
- if (flag) {
- if (!connavailable) {
- /* emulator window is active and is
- being activated, set edit menu accordingly */
-
- /* enable the menus */
- EnableItem(menu[EDITMENU], 0);
- EnableItem(menu[FILEMENU], 0);
- EnableItem(menu[WINDMENU], 0);
- EnableItem(menu[HELPMENU], 0);
-
- enablecontrolmenu();
-
- /* disable edit menu items we don't support */
- DisableItem(menu[EDITMENU], EDUNDO);
-
- /* enable edit menu items */
- EnableItem(menu[EDITMENU], EDTABLEMODE);
- EnableItem(menu[EDITMENU], EDLOAD);
- EnableItem(menu[EDITMENU], EDAPPEND);
- EnableItem(menu[EDITMENU], LOGSESSION);
- #ifdef USETEXTWINDOWS
- if (twp->edit) {
- EnableItem(menu[EDITMENU], EDCUT);
- EnableItem(menu[EDITMENU], EDCLEAR);
- }
- else {
- DisableItem(menu[EDITMENU], EDCUT);
- DisableItem(menu[EDITMENU], EDCLEAR);
- }
- #else
- DisableItem(menu[EDITMENU], EDCUT);
- #endif
- #ifdef USETEXTWINDOWS
- EnableItem(menu[EDITMENU], EDPAGEUP);
- EnableItem(menu[EDITMENU], EDPAGEDOWN);
- EnableItem(menu[EDITMENU], EDGOTOEND);
- EnableItem(menu[EDITMENU], EDFIND);
- EnableItem(menu[EDITMENU], EDFINDSEL);
- EnableItem(menu[EDITMENU], EDWRAP);
- EnableItem(menu[EDITMENU], EDUNWRAP);
- #endif
-
- /* guarantee file menu items are enabled */
- #ifdef USEABORT
- EnableItem(menu[WINDMENU], CLOSECONN);
- EnableItem(menu[WINDMENU], REOPENCONN);
- #else
- if (twp->connopen) {
- EnableItem(menu[WINDMENU], CLOSECONN);
- DisableItem(menu[WINDMENU], REOPENCONN);
- }
- else {
- DisableItem(menu[WINDMENU], CLOSECONN);
- EnableItem(menu[WINDMENU], REOPENCONN);
- }
- #endif
- EnableItem(menu[WINDMENU], RECONF);
-
- EnableItem(menu[FILEMENU], WMCLOSEWIND);
- EnableItem(menu[FILEMENU], SAVECONF);
- EnableItem(menu[FILEMENU], FILENAME);
- EnableItem(menu[FILEMENU], APPENDSCREEN);
- EnableItem(menu[FILEMENU], SAVESCREEN);
- EnableItem(menu[FILEMENU], SAVESCREENAS);
- EnableItem(menu[FILEMENU], APPENDSCREENTO);
- EnableItem(menu[FILEMENU], LOGOPEN);
- EnableItem(menu[FILEMENU], FILESESSION);
- EnableItem(menu[FILEMENU], PRINTQD);
-
- if (twp->conntype == CONN_MACTCP
- || twp->conntype == CONN_CUTCP) {
- EnableItem(menu[NETWORKMENU], 0);
- EnableItem(menu[SENDMENU], 0);
- }
- else if (twp->conntype == CONN_SERD) {
- EnableItem(menu[SERIALMENU], 0);
- #ifdef USESERSEND
- EnableItem(menu[SERSENDMENU], 0);
- #else
- EnableItem(menu[SERIALMENU], 1);
- #endif
- }
- if (twp->ibm_keymode) {
- EnableItem(menu[CURKEYMENU], 0);
- EnableItem(menu[PFKEYMENU], 0);
- }
- else {
- EnableItem(menu[ASC1KEYMENU], 0);
- EnableItem(menu[ASC2KEYMENU], 0);
- }
- }
- else {
- /* we're turning menus off because no connection exists,
- allow the user to make one! */
- EnableItem(menu[FILEMENU], 0);
- EnableItem(menu[HELPMENU], 0);
-
- DisableItem(menu[EDITMENU], 0);
- DisableItem(menu[WINDMENU], 0);
- /*
- DisableItem(menu[WINDMENU], CLOSECONN);
- DisableItem(menu[WINDMENU], REOPENCONN);
- DisableItem(menu[FILEMENU], RECONF);
- /*
-
- disablecontrolmenu();
-
- /* set the file menu */
- EnableItem(menu[FILEMENU], NEWCONN);
- EnableItem(menu[FILEMENU], OPENCONN);
-
- DisableItem(menu[FILEMENU], WMCLOSEWIND);
- DisableItem(menu[FILEMENU], SAVECONF);
- DisableItem(menu[FILEMENU], FILENAME);
- DisableItem(menu[FILEMENU], APPENDSCREEN);
- DisableItem(menu[FILEMENU], SAVESCREEN);
- DisableItem(menu[FILEMENU], SAVESCREENAS);
- DisableItem(menu[FILEMENU], APPENDSCREENTO);
- DisableItem(menu[FILEMENU], LOGOPEN);
- DisableItem(menu[FILEMENU], FILESESSION);
- DisableItem(menu[FILEMENU], PRINTQD);
-
- /* disable other menus */
- if (twp->conntype == CONN_MACTCP
- || twp->conntype == CONN_CUTCP) {
- DisableItem(menu[NETWORKMENU], 0);
- DisableItem(menu[SENDMENU], 0);
- }
- else if (twp->conntype == CONN_SERD) {
- DisableItem(menu[SERIALMENU], 0);
- #ifdef USESERSEND
- DisableItem(menu[SERSENDMENU], 0);
- #else
- DisableItem(menu[SERIALMENU], 1);
- #endif
- }
- if (twp->ibm_keymode) {
- DisableItem(menu[CURKEYMENU], 0);
- DisableItem(menu[PFKEYMENU], 0);
- }
- else {
- DisableItem(menu[ASC1KEYMENU], 0);
- DisableItem(menu[ASC2KEYMENU], 0);
- }
- }
- }
- else {
- /* !flag, set up menus for DA's */
- EnableItem(menu[EDITMENU], EDUNDO);
- EnableItem(menu[EDITMENU], EDCUT);
- EnableItem(menu[EDITMENU], EDCLEAR);
- EnableItem(menu[EDITMENU], EDSELALL);
-
- DisableItem(menu[EDITMENU], EDTABLEMODE);
-
- DisableItem(menu[EDITMENU], EDLOAD);
- DisableItem(menu[EDITMENU], EDAPPEND);
- DisableItem(menu[EDITMENU], LOGSESSION);
- #ifdef USETEXTWINDOWS
- DisableItem(menu[EDITMENU], EDPAGEUP);
- DisableItem(menu[EDITMENU], EDPAGEDOWN);
- DisableItem(menu[EDITMENU], EDGOTOEND);
- DisableItem(menu[EDITMENU], EDFIND);
- DisableItem(menu[EDITMENU], EDFINDSEL);
- DisableItem(menu[EDITMENU], EDWRAP);
- DisableItem(menu[EDITMENU], EDUNWRAP);
- #endif
-
- EnableItem(menu[FILEMENU], 0);
- /* set the file menu, leave it up or won't come back
- if no window up... */
- EnableItem(menu[FILEMENU], NEWCONN);
- EnableItem(menu[FILEMENU], OPENCONN);
-
- DisableItem(menu[FILEMENU], WMCLOSEWIND);
- DisableItem(menu[FILEMENU], SAVECONF);
- DisableItem(menu[FILEMENU], FILENAME);
- DisableItem(menu[FILEMENU], APPENDSCREEN);
- DisableItem(menu[FILEMENU], SAVESCREEN);
- DisableItem(menu[FILEMENU], SAVESCREENAS);
- DisableItem(menu[FILEMENU], APPENDSCREENTO);
- DisableItem(menu[FILEMENU], LOGOPEN);
- DisableItem(menu[FILEMENU], FILESESSION);
- DisableItem(menu[FILEMENU], PRINTQD);
-
- /* disable all other items completely */
- DisableItem(menu[HELPMENU], 0);
-
- DisableItem(menu[WINDMENU], 0);
- /*
- DisableItem(menu[WINDMENU], CLOSECONN);
- DisableItem(menu[WINDMENU], REOPENCONN);
- DisableItem(menu[WINDMENU], RECONF);
- */
-
- DisableItem(menu[CTRLMENU], 0);
-
- if (twp->conntype == CONN_MACTCP
- || twp->conntype == CONN_CUTCP) {
- DisableItem(menu[NETWORKMENU], 0);
- DisableItem(menu[SENDMENU], 0);
- }
- else if (twp->conntype == CONN_SERD) {
- DisableItem(menu[SERIALMENU], 0);
- #ifdef USESERSEND
- DisableItem(menu[SERSENDMENU], 0);
- #else
- DisableItem(menu[SERIALMENU], 1);
- #endif
- }
- if (twp->ibm_keymode) {
- DisableItem(menu[CURKEYMENU], 0);
- DisableItem(menu[PFKEYMENU], 0);
- }
- else {
- DisableItem(menu[ASC1KEYMENU], 0);
- DisableItem(menu[ASC2KEYMENU], 0);
- }
- }
- }
-
-
-
- /* take a pascal string and set the file menu command titles using it */
-
- filetitles(twp)
- struct winds * twp;
- {
- char * titp = &twp->reply.fName;
- char * logtitp = &twp->logreply.fName;
- char tbuf[256];
-
- if (twp->seltype == NULL)
- return;
-
- ptoc(titp);
-
- /* if the name is a non-null string, use it... */
- sprintf(tbuf, "Save %s%s%s", twp->seltype, *titp ? " as " : "…", titp);
- ctop(tbuf);
- SetItem(menu[FILEMENU], SAVESCREEN, tbuf);
-
- sprintf(tbuf, "Append %s%s%s", twp->seltype, *titp ? " to " : "…", titp);
- ctop(tbuf);
- SetItem(menu[FILEMENU], APPENDSCREEN, tbuf);
-
- ctop(titp);
-
- /* set Log session title */
- ptoc(logtitp);
- sprintf(tbuf, "Log session in %s", logtitp);
- ctop(tbuf);
- SetItem(menu[FILEMENU], FILESESSION, tbuf);
- ctop(logtitp);
- }
-
-
- /* set the titles to menus which work on the screen or selection
- to (e.g.) "save screen" or "save selection" as appropriate
- */
-
- selmenuitems(twp)
- struct winds * twp;
- {
- char tbuf[256];
-
- #ifdef USETEXTWINDOWS
- /* fix the text for the Append to Edit window */
- if ((twp->selystart == twp->selyend && twp->selxstart == twp->selxend))
- /* set the correct default string */
- twp->seltype = selscreen;
- else
- twp->seltype = selselection;
-
- sprintf(tbuf, "Append %s to .edit window", twp->seltype);
- ctop(tbuf);
- SetItem(menu[EDITMENU], EDAPPEND, tbuf);
- #endif
-
- if (twp->edit) {
- /* edit window is up */
- twp->seltype = seltext;
- }
- else {
- if ((twp->selystart == twp->selyend && twp->selxstart == twp->selxend))
- /* set the correct default string */
- twp->seltype = selscreen;
- else
- twp->seltype = selselection;
- }
- filetitles(twp);
-
- sprintf(tbuf, "Save %s as…", twp->seltype);
- ctop(tbuf);
- SetItem(menu[FILEMENU], SAVESCREENAS, tbuf);
-
- sprintf(tbuf, "Append %s to…", twp->seltype);
- ctop(tbuf);
- SetItem(menu[FILEMENU], APPENDSCREENTO, tbuf);
-
- }
-
-
- /* if turnon, deactivate ascii stuff & activate ibm stuff;
- else vice-versa; returns TRUE if menu bar needs redrawing */
-
- keymenus(twp)
- struct winds * twp;
- {
- int returnval = FALSE;
- static short menuibm_keymode = 1; /* neither TRUE or FALSE */
- static beenhere = FALSE; /* don't delete anything first time through */
-
- if (twp->ibm_keymode) {
- /* reflect IBM key mode in menus */
-
- DisableItem(menu[NETWORKMENU], ENDOFLINE);
- DisableItem(menu[NETWORKMENU], LOCALECHO);
-
- if (!beenhere || menuibm_keymode == FALSE) {
- /* only change the Menu Bar if the mode changed from ASCII to IBM */
-
- if (beenhere) {
- DeleteMenu(asc1keymenu);
- DeleteMenu(asc2keymenu);
- }
- beenhere = TRUE;
-
- InsertMenu(menu[CURKEYMENU], helpmenu);
- InsertMenu(menu[PFKEYMENU], helpmenu);
- returnval = TRUE;
- }
-
- pfmenuhack(twp);
- }
- else {
- /* set ASCII key mode on menus */
-
- EnableItem(menu[NETWORKMENU], ENDOFLINE);
- EnableItem(menu[NETWORKMENU], LOCALECHO);
-
- setmenubs(twp->ba_bs);
-
- if (!beenhere || menuibm_keymode == TRUE) {
- /* only change this if we need to... */
- if (beenhere) {
- DeleteMenu(curkeymenu);
- DeleteMenu(pfkeymenu);
- }
- beenhere = TRUE;
-
- InsertMenu(menu[ASC1KEYMENU], helpmenu);
- InsertMenu(menu[ASC2KEYMENU], helpmenu);
- returnval = TRUE;
- }
- }
- if (twp->ibm_keymode)
- menuibm_keymode = TRUE;
- else
- menuibm_keymode = FALSE;
-
- #ifdef USETEXTWINDOWS
- returnval = TRUE;
- if (twp->edit) {
- /* disable cursor motion etc. if edit menu up */
- if (twp->ibm_keymode) {
- DisableItem(menu[CURKEYMENU], 0);
- DisableItem(menu[PFKEYMENU], 0);
- }
- else {
- DisableItem(menu[ASC1KEYMENU], 0);
- DisableItem(menu[ASC2KEYMENU], 0);
- }
- EnableItem(menu[EDITMENU], EDCUT);
- EnableItem(menu[EDITMENU], EDCLEAR);
- EnableItem(menu[EDITMENU], EDFIND);
- EnableItem(menu[EDITMENU], EDFINDSEL);
- EnableItem(menu[EDITMENU], EDWRAP);
- EnableItem(menu[EDITMENU], EDUNWRAP);
- }
- else {
- if (twp->ibm_keymode) {
- EnableItem(menu[CURKEYMENU], 0);
- EnableItem(menu[PFKEYMENU], 0);
- }
- else {
- EnableItem(menu[ASC1KEYMENU], 0);
- EnableItem(menu[ASC2KEYMENU], 0);
- }
- DisableItem(menu[EDITMENU], EDCUT);
- DisableItem(menu[EDITMENU], EDCLEAR);
- DisableItem(menu[EDITMENU], EDFIND);
- DisableItem(menu[EDITMENU], EDFINDSEL);
- DisableItem(menu[EDITMENU], EDWRAP);
- DisableItem(menu[EDITMENU], EDUNWRAP);
- }
- #endif
-
- return(returnval);
- }
-
-
- /* change backspace->DEL checkmark in Control menu and DEL key equiv. in ASCII codes */
-
- setmenubs(flag)
- short flag;
- {
- if (flag) {
- SetItem(menu[ASC2KEYMENU], ASCMENUDEL, "\PDelete is Opt-Backspace");
- }
- else {
- SetItem(menu[ASC2KEYMENU], ASCMENUDEL, "\PDelete is Backspace");
- }
- }
-
-
- setmenureturn(twp)
- struct winds * twp;
- {
- if (twp->ibm_keymode) {
- if (twp->crtonl) {
- SetItem(menu[PFKEYMENU], MENTER, "\PEnter Shift-Return");
- }
- else {
- SetItem(menu[PFKEYMENU], MENTER, "\PEnter Return");
- }
- }
- }
-
-
- /* telnet buffer mode */
-
- setsendm(mode)
- int mode;
- {
- if (mode == NEWLINE) {
- SetItem(menu[NETWORKMENU], ENDOFLINE, "\PSend after Return");
- }
- else if (mode == EVERYC) {
- SetItem(menu[NETWORKMENU], ENDOFLINE, "\POn every character");
- }
- }
-
-
- /* a routine to let telnet set the menu item */
-
- setmecho(echomode)
- {
- if (echomode == REMOTE)
- SetItem(menu[NETWORKMENU], LOCALECHO, "\PRemote echo");
- else
- SetItem(menu[NETWORKMENU], LOCALECHO, "\PLocal echo");
- }
-
-
- /* shows an ASCII keypad */
-
- showkeypad()
- {
- }
-
-
-
- menuctrl(theItem)
- short theItem;
- {
- switch (theItem) {
- case MSHOWKEYPAD: {
- if (keydp->ibm_keymode) {
- if (setibmkeypad()) {
- /* do the keypad dialog */
- keydp->confchanged = TRUE;
- }
- }
- else {
- if (setvtkeypad()) {
- /* do the keypad dialog */
- keydp->confchanged = TRUE;
- }
- }
- break;
- }
- case MSETGLOBAL: {
- setglobalconf();
- break;
- }
- case MSETWIND: {
- setwindconf();
- break;
- }
- case MSETEM: {
- if (keydp->ibm_mode)
- set3270conf();
- else
- setvtconf();
- break;
- }
- case MSETCOLOR: {
- if (setcolormap())
- keydp->confchanged = TRUE;
- break;
- }
- case KEYXSET: {
- if (querynewconf())
- break;
-
- setkeydialog();
- break;
- }
- case KEYXON: {
- togglemacros();
- keydp->confchanged = TRUE;
- CheckItem(menu[CTRLMENU], KEYXON, keydp->dokeymacros ? TRUE : FALSE);
- break;
- }
- case MCONNMACRO: {
- if (querynewconf())
- break;
-
- if (keydp->connmacro)
- DisposHandle(keydp->connmacro);
- keydp->connmacro = setmacro('CONN', 0, "Connection Open macro");
- break;
- }
- #ifdef MCLOSEMACRO
- case MCLOSEMACRO: {
- if (querynewconf())
- break;
-
- if (keydp->closemacro)
- DisposHandle(keydp->closemacro);
- keydp->closemacro = setmacro('CONN', 1, "Connection Close macro");
- break;
- }
- #endif
- case MCLIKMACRO: {
- if (querynewconf())
- break;
-
- if (keydp->clickmacro)
- DisposHandle(keydp->clickmacro);
- keydp->clickmacro = setmacro('CLIK', 0, "Mouse double-click");
- if (keydp->clickmacro == NULL) {
- /* get default double-click macro resource from application res */
- keydp->clickmacro = GetResource('CLIK', 0);
- if (keydp->clickmacro != NULL)
- DetachResource(keydp->clickmacro);
- }
- break;
- }
- case KEYXSHOW: {
-
- #ifdef USETEXTWINDOWS
- /* dump the macros out into the text window */
- keyxappend(keydp);
- #else
- keyxdump(OURCHICAGO, 12);
- #endif
- break;
- }
- }
- }
-
-
- /* window menu routines */
-
- /* some API-run sessions may not have a control for the user to play with,
- see hyperface.c, so we need a separate array of window pointers
- */
-
- /* handle window menu items */
-
- menuwind(theItem)
- short theItem;
- {
- switch (theItem) {
- case CLOSECONN: {
- getcontext(keydp);
- if (keydp->connopen) {
- if (querycloseconn(keydp))
- /* user doesn't want to end session */
- return();
-
- closeconn(keydp);
- }
- #ifdef USEABORT
- else {
- /* reopen session */
- if (optkeydown()) {
- /* give user the opportunity to revise the configuration */
- if (namewindow()) {
- /* continue if Cancelled */
- break;
- }
- }
- openconn(emdp);
- }
- #endif
- return();
- }
- case REOPENCONN: {
- /* re-open a connection */
- if (!keydp->connopen) {
- /* reopen session */
- getcontext(keydp);
- if (optkeydown()) {
- /* give user the opportunity to revise the configuration */
- if (namewindow()) {
- /* continue if Cancelled */
- return();
- }
- }
- openconn(emdp);
- }
- return();
- }
- #ifdef USEABORTCONN
- case REOPENCONN: {
- short item;
- DialogPtr dptr;
- GrafPtr oport;
- short type;
- Rect rect;
- Handle hobj;
- /* general purpose GetDItem vars */
-
- if (keydp->connopen) {
- /* some tcp connection has been attempted */
- getcontext(keydp);
-
- if (chkbackground()) {
- /* in background */
- resetsendbuf();
- cls_usr();
- }
- else {
- /* ask user whether killing connection is really OK */
- GetPort(&oport);
- if ((dptr = GetNewDialog(KILLDIALOG, (Ptr) NULL, (WindowPtr) -1))
- != NULL) {
-
- emwdeactivate();
-
- SetPort(dptr);
- centerwind(dptr);
-
- /* hilite "OK" key */
- GetDItem(dptr, KILLOK, &type, &hobj, &rect);
- buthilite(&rect);
-
- modaldialog = TRUE;
- do {
- ModalDialog( (ProcPtr) alfilter, &item);
- }
- while (item == 0);
-
- DisposDialog(dptr);
- SetPort(oport);
- if (item == KILLOK) {
- resetsendbuf();
- }
- }
- modaldialog = FALSE;
- }
- }
- return();
- }
- #endif
- case RECONF: {
- short oconntype;
- short otermtype;
- short oibm_keys;
-
- oconntype = keydp->conntype;
- oibm_keys = keydp->ibm_keymode;
-
- if (keydp == emdp)
- /* guarantee keydp struct updated, we may setcontext() */
- savecontext(emdp);
- else
- getcontext(keydp);
-
- if (namewindow())
- /* cancelled */
- return;
-
- termreset();
-
- if (keydp->connopen && keydp->conntype != oconntype) {
- /* can't change in mid-stream */
- keydp->conntype = oconntype;
- error("Sorry, you can't change the Connection Type while connected!");
- }
- if (!keydp->ibm_mode && oibm_keys != keydp->ibm_keymode) {
- /* change the key map if not a real 3270 */
- setibm_keymode(keydp->ibm_keymode);
- }
- gettermtype();
- return();
- }
- #ifdef USETEXTWINDOWS
- case WMROTATE: {
- /* toggle the edit window */
- if (keywindow == keydp->emwindow) {
- if (keydp->hidetextwindow) {
- keydp->hidetextwindow = FALSE;
- }
- selectwindow(keydp->textwindow);
- ShowWindow(keydp->textwindow);
- }
- else if (keywindow == keydp->textwindow) {
- selectwindow(keydp->emwindow);
- }
- return();
- }
- #endif
- case WMSKIPWIND: {
- return();
- }
- default: {
- windmenuselect(theItem - WMFIRSTWIND);
- break;
- }
- }
- }
-
- /* add a window's title to the menu */
-
- addwindmenu(windp)
- WindowPtr windp;
- {
- short count;
-
- for (count = 0; count < menuwindowcount; count++) {
- /* see if any slots are empty */
- if (menuwindows[count] == NULL) {
- break;
- }
- }
- /* else count = menuwindowcount, the last slot in line */
- if (count >= MAXWIND)
- return(-1);
-
- HLock(((WindowPeek) windp)->titleHandle);
- if (count == menuwindowcount) {
- /* add another window slot */
- AppendMenu(menu[WINDMENU], *((WindowPeek) windp)->titleHandle);
- if (count < 9)
- /* use Apple-# to select windows */
- if (environs.systemVersion)
- SetItemCmd(menu[WINDMENU], count + WMFIRSTWIND, (char) (count + '1'));
- }
- else {
- /* reset the name of the old one */
- EnableItem(menu[WINDMENU], count + WMFIRSTWIND);
- SetItem(menu[WINDMENU], count + WMFIRSTWIND, *((WindowPeek) windp)->titleHandle);
- }
- HUnlock(((WindowPeek) windp)->titleHandle);
-
- menuwindows[count] = windp;
- if (count == menuwindowcount)
- /* we added another slot */
- menuwindowcount++;
-
- return(0);
- }
-
-
- /* change a window's title in the menu */
-
- windmenutitle(twp)
- struct winds * twp;
- {
- int count;
- WindowPtr thewind;
-
- thewind = NULL;
- for (count = 0; count < menuwindowcount; count++) {
- if (menuwindows[count] == twp->emwindow) {
- thewind = twp->emwindow;
- break;
- }
- }
- if (count == menuwindowcount)
- /* couldn't match window */
- return(-1);
-
- HLock(((WindowPeek) thewind)->titleHandle);
- SetItem(menu[WINDMENU], count + WMFIRSTWIND, *((WindowPeek) thewind)->titleHandle);
- HUnlock(((WindowPeek) thewind)->titleHandle);
-
- return(0);
- }
-
-
- /* change a window's mark in the menu */
-
- windmenumark(twp, mark)
- struct winds * twp;
- int mark;
- {
- int count;
- WindowPtr thewind;
-
- thewind = NULL;
- for (count = 0; count < menuwindowcount; count++) {
- if (menuwindows[count] == twp->emwindow) {
- thewind = twp->emwindow;
- break;
- }
- }
- if (count == menuwindowcount)
- /* couldn't match window */
- return(-1);
-
- SetItemMark(menu[WINDMENU], count + WMFIRSTWIND, (char) mark);
-
- return(0);
- }
-
-
- /* change a window's style in the menu */
-
- windmenustyle(twp, mark)
- struct winds * twp;
- int mark;
- {
- int count;
- WindowPtr thewind;
-
- thewind = NULL;
- for (count = 0; count < menuwindowcount; count++) {
- if (menuwindows[count] == twp->emwindow) {
- thewind = twp->emwindow;
- break;
- }
- }
- if (count == menuwindowcount)
- /* couldn't match window */
- return(-1);
-
- SetItemStyle(menu[WINDMENU], count + WMFIRSTWIND, (char) mark);
-
- return(0);
- }
-
-
- /* change a window's icon in the menu */
-
- windmenuicon(twp, mark)
- struct winds * twp;
- int mark;
- {
- int count;
- WindowPtr thewind;
-
- thewind = NULL;
- for (count = 0; count < menuwindowcount; count++) {
- if (menuwindows[count] == twp->emwindow) {
- thewind = twp->emwindow;
- break;
- }
- }
- if (count == menuwindowcount)
- /* couldn't match window */
- return(-1);
-
- SetItemIcon(menu[WINDMENU], count + WMFIRSTWIND, (Byte) mark);
-
- return(0);
- }
-
-
- /* remove the window from the window menu
- currently simply disables it, should do something fancier
- */
-
- killwindmenu(windp)
- WindowPtr windp;
- {
- short count;
-
- for (count = 0; count < menuwindowcount; count++) {
- if (menuwindows[count] == windp) {
- SetItemMark(menu[WINDMENU], count + WMFIRSTWIND, (unsigned char) noMark);
- DisableItem(menu[WINDMENU], count + WMFIRSTWIND);
- menuwindows[count] = NULL;
- break;
- }
- }
- }
-
-
- /* given an item #, select a window */
-
- windmenuselect(windnum)
- short windnum;
- {
- GrafPtr thewind;
- struct winds * twp;
-
- if (windnum >= menuwindowcount)
- return(-1);
-
- thewind = menuwindows[windnum];
- if (thewind == NULL)
- return(-1);
-
- twp = ((WindowPeek) thewind)->refCon;
-
- if (twp->icon_up) {
- expandwindow(twp);
- }
- else {
- #ifdef USETEXTWINDOWSCOUPLED
- if (twp->edit) {
- selectwindow(twp->textwindow);
- ShowWindow(twp->textwindow);
-
- SendBehind(twp->emwindow, twp->textwindow);
- ShowWindow(twp->emwindow);
- PaintOne(twp->emwindow, ((WindowPeek) twp->emwindow)->strucRgn);
- CalcVis(twp->emwindow);
- }
- else {
- selectwindow(twp->emwindow);
- ShowWindow(twp->emwindow);
-
- if (!twp->hidetextwindow) {
- SendBehind(twp->textwindow, twp->emwindow);
- ShowWindow(twp->textwindow);
- PaintOne(twp->textwindow, ((WindowPeek) twp->textwindow)->strucRgn);
- CalcVis(twp->textwindow);
- }
- }
- #else
- selectwindow(twp->emwindow);
- ShowWindow(twp->emwindow);
- #endif
- }
- }
-
-
- /* make the Control Menu */
-
- makecontrolmenu(strtitle)
- Str255 * strtitle;
- {
- menu[CTRLMENU] = NewMenu(ctrlmenu, strtitle);
-
- AppendMenu(menu[CTRLMENU], "\PGlobal…");
- AppendMenu(menu[CTRLMENU], "\PSession…");
- AppendMenu(menu[CTRLMENU], "\PEmulator…");
- AppendMenu(menu[CTRLMENU], "\PFont Size");
- AppendMenu(menu[CTRLMENU], "\PColor…");
- AppendMenu(menu[CTRLMENU], "\P(-");
- AppendMenu(menu[CTRLMENU], "\PSet Key Pad…");
- #ifdef USETEXTWINDOWS
- AppendMenu(menu[CTRLMENU], "\PDump key macros into .edit");
- #else
- AppendMenu(menu[CTRLMENU], "\PShow macro keys…");
- #endif
- AppendMenu(menu[CTRLMENU], "\PDefine key macros…/D");
- AppendMenu(menu[CTRLMENU], "\PKey macros on/M");
- AppendMenu(menu[CTRLMENU], "\P(-");
- AppendMenu(menu[CTRLMENU], "\PSet Connection macro…");
- AppendMenu(menu[CTRLMENU], "\PSet Double-click macro…");
- #ifdef MCLOSEMACRO
- AppendMenu(menu[CTRLMENU], "\PSet Close macro…");
- #endif
- }
-
-
- enablecontrolmenu()
- {
- EnableItem(menu[CTRLMENU], 0);
-
- if (environs.systemVersion) {
- EnableItem(menu[CTRLMENU], MFONTSIZE);
- }
- if (environs.hasColorQD) {
- /* turn off if color not present */
- EnableItem(menu[CTRLMENU], MSETCOLOR);
- }
- EnableItem(menu[CTRLMENU], MSETWIND);
- EnableItem(menu[CTRLMENU], MSETEM);
- EnableItem(menu[CTRLMENU], MSHOWKEYPAD);
- EnableItem(menu[CTRLMENU], KEYXSHOW);
- EnableItem(menu[CTRLMENU], KEYXSET);
- EnableItem(menu[CTRLMENU], KEYXON);
- EnableItem(menu[CTRLMENU], MCONNMACRO);
- #ifdef MCLOSEMACRO
- EnableItem(menu[CTRLMENU], MCLOSEMACRO);
- #endif
- EnableItem(menu[CTRLMENU], MCLIKMACRO);
- }
-
-
- /* disable all the items except set global dialog */
-
- disablecontrolmenu()
- {
- DisableItem(menu[CTRLMENU], MSETWIND);
- DisableItem(menu[CTRLMENU], MSETEM);
- DisableItem(menu[CTRLMENU], MFONTSIZE);
- DisableItem(menu[CTRLMENU], MSETCOLOR);
- DisableItem(menu[CTRLMENU], MSHOWKEYPAD);
- DisableItem(menu[CTRLMENU], KEYXSHOW);
- DisableItem(menu[CTRLMENU], KEYXSET);
- DisableItem(menu[CTRLMENU], KEYXON);
- DisableItem(menu[CTRLMENU], MCONNMACRO);
- #ifdef MCLOSEMACRO
- DisableItem(menu[CTRLMENU], MCLOSEMACRO);
- #endif
- DisableItem(menu[CTRLMENU], MCLIKMACRO);
- }
-
-
- /* clear out anything in the send buffers */
-
- resetsendbuf()
- {
- if (emdp->conntype == CONN_MACTCP) {
- mactcpclrsendbuf();
- }
- #ifdef DUALTCP
- else if (emdp->conntype == CONN_CUTCP) {
- clrsendbuf();
- cls_usr();
- }
- #endif
- else if (emdp->conntype == CONN_SERD) {
- cls_usr();
- }
- }
-
-
- /* TODO move
- send a TCP urgent packet */
-
- dotcpurgent()
- {
- #ifdef DUALTCP
- if (emdp->conntype == CONN_CUTCP)
- tcpurgent();
- #endif
- }
-
-
- tcpmenu()
- {
- AppendMenu(menu[NETWORKMENU], "\P "); /* add GATEADDR to menu */
- }
-
-
- /* check the font size current being used */
-
- setfontsizemenu(fsize)
- int fsize;
- {
- char name[NAMESIZE];
- short count;
-
- if (environs.systemVersion == 0)
- /* can't handle the nested menu */
- return;
-
- for (count = 1; count <= FONTSIZECOUNT; count++) {
- CheckItem(menu[FSIZEMENU], count, FALSE);
- GetItem(menu[FSIZEMENU], count, name);
- ptoc(name);
- if (fsize == atoi(name)) {
- /* this is the newly selected font */
- CheckItem(menu[FSIZEMENU], count, TRUE);
- }
- }
- }
-
-
-